﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LM.InterfacesFabricas.DTOs;
using LM.InterfacesFabricas.Excecoes;
using LM.InterfacesFabricas.Fabricas;
using LM.InterfacesFabricas.Interfaces.Servicos;

namespace LM.Tela.Desktop.Formularios
{
    public partial class frmCadastroDeModelo : FormBase
    {
        public frmCadastroDeModelo()
        {
            InitializeComponent();
        }
        private void btnSalvar_Click(object sender, EventArgs e)
        {
          //  ValidaDadosObrigatorio();
            Salvar();
        }
     
        private void Salvar()
        {
            int codigo;
            int.TryParse(txtCodigo.Text, out codigo);

           var modelo = new DtoModelo
            {
                Codigo = codigo,
                Descricao = txtModelo.Text,
                MarcaId = ((DtoMarca)cbxMarca.SelectedItem).Codigo
            };


            var servicoDeModelo = FabricaGenerica.Crie<IServicoDeModelo>();

            if (!EmEdicao())
                servicoDeModelo.Cadastre(modelo);
            else
                servicoDeModelo.Atualize(modelo);

            PrepareTelaParaNovoRegistro();
        }

        

        private void ValidaDadosObrigatorio()
        {
            if (cbxMarca.SelectedIndex < 0)
                throw new InconsistenciasException("Selecione uma Marca.");
        }

        private void LimpeCamposEdicao()
        {
            txtCodigo.Text = string.Empty;
            txtModelo.Text = string.Empty;
            cbxMarca.SelectedIndex = -1;
        }

        private void CarregueItensJaCadastrados()
        {
            grdModelo.DataSource = FabricaGenerica.Crie<IServicoDeModelo>().ConsulteTodos();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private void frmCadastroDeModelo_Load(object sender, EventArgs e)
        {
              CarregarMarcas();
          //  PrepareTelaParaNovoRegistro();

        }

        private void grdModelo_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                var modelo = ((IList<DtoModelo>)grdModelo.DataSource)[e.RowIndex];

                txtCodigo.Text = modelo.Codigo.ToString(CultureInfo.InvariantCulture);
                txtCodigo.Enabled = false;
                txtModelo.Text = modelo.Descricao;
            }
        }
        private bool EmEdicao()
        {
            return !string.IsNullOrWhiteSpace(txtCodigo.Text) && txtCodigo.Enabled == false;
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!EmEdicao())
            {
                this.ExibaInconsistencia("Modelo não selecionado para edição.");
            }
            else
            {
                var servicoDeModelo = FabricaGenerica.Crie<IServicoDeModelo>();
                servicoDeModelo.Exclua(int.Parse(txtCodigo.Text));

                PrepareTelaParaNovoRegistro();
            }
        }
        private void PrepareTelaParaNovoRegistro()
        {
            LimpeCamposEdicao();
            CarregueItensJaCadastrados();
            txtCodigo.Enabled = true;
            txtCodigo.Focus();
        }

        private void CarregarMarcas()
        {
            AdicionarItemComboBox(cbxMarca, FabricaGenerica.Crie<IServicoDeMarca>().ConsulteTodos(), "Descricao", "Codigo");
        }

        private void AdicionarItemComboBox(ComboBox comboBox, dynamic lista, string valor, string chave)
        {
            comboBox.DataSource = lista;
            comboBox.DisplayMember = valor;
            comboBox.ValueMember = chave;
        }
       
    }
}
